using System;
using System.Collections.Generic;
using ns26;
using ns27;
using Triton.Game.Mono;

namespace Triton.Game.Mapping
{
	[Attribute38("DebugConsole")]
	public class DebugConsole : MonoClass
	{
		[Attribute38("DebugConsole.CommandParamDecl")]
		public class CommandParamDecl : MonoClass
		{
			public enum ParamType
			{
				STR,
				I32,
				F32,
				BOOL
			}

			public string Name => method_4("Name");

			public ParamType Type => method_2<ParamType>("Type");

			public CommandParamDecl(IntPtr address, string className)
				: base(address, className)
			{
			}

			public CommandParamDecl(IntPtr address)
				: this(address, "CommandParamDecl")
			{
			}
		}

		[Attribute38("DebugConsole.ConsoleCallbackInfo")]
		public class ConsoleCallbackInfo : MonoClass
		{
			public bool DisplayInCommandList => method_2<bool>("DisplayInCommandList");

			public List<CommandParamDecl> ParamList => method_3<Class271<CommandParamDecl>>("ParamList")?.method_25();

			public ConsoleCallbackInfo(IntPtr address, string className)
				: base(address, className)
			{
			}

			public ConsoleCallbackInfo(IntPtr address)
				: this(address, "ConsoleCallbackInfo")
			{
			}

			public int GetNumParams()
			{
				return method_11<int>("GetNumParams", Array.Empty<object>());
			}
		}

		public enum DebugConsoleResponseType
		{
			CONSOLE_OUTPUT,
			LOG_MESSAGE
		}

		public bool m_initialized => method_2<bool>("m_initialized");

		public DebugConsole(IntPtr address, string className)
			: base(address, className)
		{
		}

		public DebugConsole(IntPtr address)
			: this(address, "DebugConsole")
		{
		}

		public static DebugConsole Get()
		{
			return MonoClass.smethod_15<DebugConsole>(TritonHs.MainAssemblyPath, "", "DebugConsole", "Get", Array.Empty<object>());
		}

		public void InitConsoleCallbackMaps()
		{
			method_8("InitConsoleCallbackMaps");
		}

		public void InitServerConsoleCallbackMap()
		{
			method_8("InitServerConsoleCallbackMap");
		}

		public void InitClientConsoleCallbackMap()
		{
			method_8("InitClientConsoleCallbackMap");
		}

		public void SendDebugConsoleResponse(DebugConsoleResponseType type, string message)
		{
			method_8("SendDebugConsoleResponse", type, message);
		}

		public void OnCommandReceived()
		{
			method_8("OnCommandReceived");
		}

		public void OnCommandResponseReceived()
		{
			method_8("OnCommandResponseReceived");
		}

		public void Init()
		{
			method_8("Init");
		}
	}
}
